package com.haier.cre.commonframe.utils;

import android.app.Activity;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;

import com.haier.cre.commonframe.base.LibApplication;

import java.util.LinkedList;
import java.util.List;

/**
 * 项目名：CommonLibrary
 * 包 名：com.haier.cre.commonframe.utils
 * 创建人：18002063
 * 日 期：2018/10/16
 * 简 述：UI相关的工具类,可以方便的获取到 上下文 dp和px的互转 主线程handler 获取资源等等
 */
public class UIUtils {

    protected static List<Activity> activityStack = new LinkedList<Activity>();

    /**
     * 将当前activity添加到任务栈
     *
     * @param a
     */
    public static void addActivity(Activity a) {
        activityStack.add(a);
    }

    /**
     * 清空activity的任务栈
     */
    public static void finishAll() {
        for (int i = activityStack.size() - 1; i > -1; i--) {
            Activity a = activityStack.get(i);
            a.finish();
        }
        activityStack.clear();
    }

    /**
     * 从任务栈中移除当前activity
     *
     * @param a
     */
    public static void remove(Activity a) {
        if (activityStack.contains(a))
            activityStack.remove(a);
    }

    /**
     * 获取到主线程的 上下文
     *
     * @return
     */
    public static Context getContext() {
        return LibApplication.getApplication();
    }

    /**
     * 判断当前的线程是不是在主线程
     *
     * @return
     */
    public static boolean isRunInMainThread() {
        return android.os.Process.myTid() == getMainThreadId();
    }

    /**
     * 运行在主线程
     *
     * @param runnable
     */
    public static void runInMainThread(Runnable runnable) {
        if (isRunInMainThread()) {
            runnable.run();
        } else {
            post(runnable);
        }
    }

    /**
     * 延时在主线程执行runnable
     */
    public static boolean postDelayed(Runnable runnable, long delayMillis) {
        return getHandler().postDelayed(runnable, delayMillis);
    }

    /**
     * 在主线程执行runnable
     */
    public static boolean post(Runnable runnable) {
        return getHandler().post(runnable);
    }

    /**
     * 从主线程looper里面移除runnable
     */
    public static void removeCallbacks(Runnable runnable) {
        getHandler().removeCallbacks(runnable);
    }

    /**
     * 获取主线程的ID
     *
     * @return
     */
    public static long getMainThreadId() {
        return LibApplication.getMainThreadId();
    }

    /**
     * 获取主线程的handler
     */
    public static Handler getHandler() {
        return LibApplication.getMainThreadHandler();
    }

    /**
     * 获取主线程
     *
     * @return
     */
    public static Thread getMainThread() {
        return LibApplication.getMainThread();
    }

    /**
     * 充气筒 填充布局
     *
     * @param resId 布局的id,如R.layout.XXX
     * @return
     */
    public static View inflate(int resId) {
        return LayoutInflater.from(getContext()).inflate(resId, null);
    }

    /**
     * 获取资源
     */
    public static Resources getResources() {
        return getContext().getResources();
    }

    /**
     * 获取文字
     */
    public static String getString(int resId) {
        return getResources().getString(resId);
    }

    /**
     * 获取文字
     */
    public static CharSequence getText(int resId) {
        return getResources().getText(resId);
    }

    /**
     * 获取文字数组
     */
    public static String[] getStringArray(int resId) {
        return getResources().getStringArray(resId);
    }

    /**
     * 获取dimen
     */
    public static int getDimens(int resId) {
        return getResources().getDimensionPixelSize(resId);
    }

    /**
     * 获取drawable
     */
    public static Drawable getDrawable(int resId) {
        return getResources().getDrawable(resId);
    }

    /**
     * 获取颜色
     */
    public static int getColor(int resId) {
        return getResources().getColor(resId);
    }

    /**
     * 获取颜色选择器
     */
    public static ColorStateList getColorStateList(int resId) {
        return getResources().getColorStateList(resId);
    }
}
